<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 辅助函数
      // 它接收两个参数 child 和 parent，其中 child 是子类的构造函数，parent 是父类的构造函数。
      function inheritPrototype(child, parent) {
        var prototype = Object.create(parent.prototype)
        prototype.constructor = child
        child.prototype = prototype
      }

      // 父类
      function Parent(name) {
        this.name = name
      }

      Parent.prototype.sayHi = function () {
        console.log('Hi, my name is ' + this.name)
      }

      // 子类
      function Child(name, age) {
        Parent.call(this, name)
        this.age = age
      }

      // 继承父类的方法和属性
      inheritPrototype(Child, Parent)

      // 这行代码必须放在 （继承父类的方法和属性） 之后
      Child.prototype.sayAge = function () {
        console.log('I am ' + this.age + ' years old.')
      }

      // 使用示例
      var child = new Child('John', 10)
      child.sayHi() // 输出: "Hi, my name is John"
      child.sayAge() // 输出: "I am 10 years old."
    </script>
  </body>
</html>
